The Human Interface Device (HID) standard is a protocol that allows human-operated input devices to send data to a host computer. HID is flexible regarding what information devices are allowed to report. Pointer devices (e.g., mice, pens, touch digitizers, etc.) all report x-y coordinates, but depending on the device, data such as pressure, tilt and contact geometry may or may not be reported. In addition, HID allows devices to report custom properties, effectively allowing them to include any arbitrary information. The fact that certain data may or may not be present makes it challenging for developers to write software that supports these devices. Often, a developer must write different sections of code to support different types of devices.
In addition, developers must contend with different user interface frameworks that use different coordinate systems which may be relative to the physical screen, the application window, UI elements within the window, or other reference frames. Keeping track of a variety of coordinate systems is tedious, and forces developers to write code differently based on the UI framework being used.
In addition, when performing gesture recognition, most gesture recognizers work on a full set of inputs. It has not been possible for a developer to code for basic gesture detection at the contact level without sacrificing the use of system-provided gesture recognition.
Finally, legacy applications may expect traditional mouse messages. Such applications may not expect device-neutral pointer messages containing mouse data; there has not been any way to support these applications while at the same time providing a mechanism that transforms generic pointer data into legacy mouse data in an efficient way.
Discussed below are techniques related to providing unified access to inputs (pointers) from pointer devices such as mice, touch surfaces, pens, or other input devices that allow a user to “point” in two or three dimensions.